//单向循环链表

#include "dxlist.h"

linklist list_init(void)                 //初始化
{
	linklist head = calloc(1,sizeof(listnode));
	head->next = head;
	return head;
}
bool  list_add_tail(linklist new, linklist head)//将节点加在最后面
{
	if (new == NULL)
	{
		return false;		
	}
	linklist tmp;
	tmp = head;
	for(;tmp->next!=head;tmp=tmp->next);
	tmp->next = new;
	new->next = head;
	tmp = NULL;
	return true;
}

bool list_add(linklist new, linklist head)//将节点加在头节点后面
{
	if(new == NULL)
	{
		return false;
	}
	new->next = head->next;
	head->next = new;
	return true;
}

bool list_del(linklist node, linklist head)        //删除节点
{
	if(head->next == head)
	{
		return false;
	}
	linklist tmp;
	int i=0;
	for(tmp=head; tmp->next != node; tmp=tmp->next)
	{
		if(tmp==head)
			i++;
		if(i>=2)
		{
			printf("done have the node");
			break;
		}	
	}
	tmp->next= tmp->next->next;
	node = NULL;
	return true;
}
bool list_move(linklist new, linklist head)   //移动节点到头节点后面
{
	list_del(new, head);
	list_add(new, head);
	return true;
}
bool list_move_tail(linklist new, linklist head)
{
	list_del(new, head);
	list_add_tail(new, head);
}


linklist list_node(datatype a)       //创建新节点,一般在外部设计
{
	linklist new = calloc(1,sizeof(listnode));
	new->data =a;
	new->next =NULL;
	return new;
}

void show_list(linklist head)  //遍历链表，一般在外边设计
{
	struct node *tmp;
	tmp=head->next;
	if(tmp == head)
		return ;
		
	for(;tmp!=head;tmp=tmp->next)	
	{		
		printf("%d\n",tmp->data);
	}
	return ;
}




